package ar.com.cubika.trainees.collections;

import org.apache.commons.beanutils.MethodUtils;
import org.apache.commons.collections.Predicate;

public class ParametrizedMethodPredicate implements Predicate {
	private Object parameter;
	private String selector;
	
	/**
	 * Construye un nuevo Predicate que evalua un metodo booleano
	 * con un parametro 
	 * @param parameter el objeto a comparar
	 * @param selector el selector del mensaje a enviarle 
	 */
	public ParametrizedMethodPredicate(Object parameter, String selector) {
		this.parameter = parameter;
		this.selector = selector;
	}


	public boolean evaluate(Object obj) {
		try {
			return (((Boolean)MethodUtils.invokeMethod(
					obj, selector, new Object[] {parameter})).
					booleanValue());
		} catch (Exception e) {
			return false;
		}
	}

}
